|
Technical Q&AOPS 24 - グリニッジ標準時との時差と「世界地図」コントロールパネル(1999 年 5 月 17 日)
Q: 「世界地図」コントロールパネルからグリニッジ標準時との時差を読み取る方法はあるのですか。 A: 実際には、現在どこにいるかを見つけ出すシステムレベルの呼び出しが存在します。これは、ReadLocation という名前の Script Manager 呼び出しで (「世界地図」コントロールパネルによって使用される)、必要な情報をすべて提供する構造体を返します。次に、MPW 411 からコピーした、この呼び出しの記述を示します。
これらのルーチンは、Macintosh のパラメータ RAM に格納されている地理的位置および時間帯の情報にアクセスします。たとえば、時間帯の情報は、書類やメールメッセージが作成された絶対時刻 (GMT) を導き出すために使用できます。時間帯を隔てて書類を受け取ったときにこの情報を使用すると、作成日時は正しいものになります。この情報を使用しないと、作成日時が書類を読んだ日時よりも後になってしまうこともあります (たとえば、火曜日に東京でメールを書いて、それをクパチーノに送信した場合、そのメールは月曜日に受信されて読まれます)。また、地理的情報はそれを必要とするアプリケーションで使用できます。 gmtDelta フィールドは、グリニッジ標準時 (GMT) と使用中の Macintosh の現在時刻との時差 (秒単位) を表します。したがって、現在の Macintosh の時刻が 1:00 AM で、現在の GMT が 2:00 AM であれば、現在時刻は GMT よりも 1 時間 (3600秒) 少ないため、gmtDelta の値は -3600 になります。gmtDelta フィールドは符号付きの 3 バイト値です。 dlsDelta フィールドの上位ビット (ビット 7) は、夏時間の現在のステータスを表します。夏時間が有効な場合、dlsDelta のビット 7 はセットされ、夏時間が無効な場合、ビット 7 はクリアされます。dlsDelta の他の 7 つのビット (ビット 0 からビット 6) は、Apple が将来的に使用するために予約されています (これは、AOCE をリリースするために定義されました。System 7 Pro の「日付 & 時刻」コントロールパネルにあった「夏時間」チェックボックスは、他のいくつかのユーティリティが使用しているように、これらのセマンティックスを使用しています)。 gmtDelta の値は、dlsDelta の設定に関係なく、常に GMT との現在の時差を表します。つまり、現在の時刻からgmtDelta を差し引くことで、常に GMT を計算できます。 このことは、夏時間の間の gmtDelta の値が平常時の値とは異なるということを意味します。 MachineLocation が設定されていない場合、それは<0,0,0> となります。 gmtDelta の最上位バイトはプログラムを書くときにマスクして保存してください。これは将来的に拡張性を考えて予約されています。gmtDelta は、GMT の東に向かう秒単位で表されます。たとえば、サンフランシスコの場合は -28,800 秒です (8 × 3600 秒)。緯度と経度は、1 フィート以下の精度を与える大きな円の角度として表され、これはほとんどの目的を達成するには十分な精度といえます。たとえば、Fract 値の 1.0 は 90 度に相当し、-1.0 は -90 度に相当します。また、-2.0 は -180 度に相当します。 C の場合
gmtDelta は実際には 3 バイトの値であるため、次に示す C のサンプルコードのように、この値を適切に取得または設定するには十分な注意が必要です。
-- Mark Cookson Worldwide Developer Technical Support Technical Q&As | Contents Previous Question | Next Question To contact us, please use the Contact Us page. |